home *** CD-ROM | disk | FTP | other *** search
/ Spidla DivX / DivX.bin / FLAC 1.1.0 / include / OggFLAC / stream_decoder.h < prev    next >
Encoding:
C/C++ Source or Header  |  2003-01-01  |  21.9 KB  |  582 lines

  1. /* libOggFLAC - Free Lossless Audio Codec + Ogg library
  2.  * Copyright (C) 2002,2003  Josh Coalson
  3.  *
  4.  * This library is free software; you can redistribute it and/or
  5.  * modify it under the terms of the GNU Library General Public
  6.  * License as published by the Free Software Foundation; either
  7.  * version 2 of the License, or (at your option) any later version.
  8.  *
  9.  * This library is distributed in the hope that it will be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12.  * Library General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU Library General Public
  15.  * License along with this library; if not, write to the
  16.  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  17.  * Boston, MA  02111-1307, USA.
  18.  */
  19.  
  20. #ifndef OggFLAC__STREAM_DECODER_H
  21. #define OggFLAC__STREAM_DECODER_H
  22.  
  23. #include "export.h"
  24.  
  25. #include "FLAC/stream_decoder.h"
  26.  
  27. #ifdef __cplusplus
  28. extern "C" {
  29. #endif
  30.  
  31.  
  32. /** \file include/OggFLAC/stream_decoder.h
  33.  *
  34.  *  \brief
  35.  *  This module contains the functions which implement the stream
  36.  *  decoder.
  37.  *
  38.  *  See the detailed documentation in the
  39.  *  \link oggflac_stream_decoder stream decoder \endlink module.
  40.  */
  41.  
  42. /** \defgroup oggflac_decoder OggFLAC/ *_decoder.h: decoder interfaces
  43.  *  \ingroup oggflac
  44.  *
  45.  *  \brief
  46.  *  This module describes the decoder layers provided by libOggFLAC.
  47.  *
  48.  * libOggFLAC currently provides the same stream layer access as libFLAC;
  49.  * the interface is identical.  See the \link flac_decoder FLAC
  50.  * decoder module \endlink for full documentation.
  51.  */
  52.  
  53. /** \defgroup oggflac_stream_decoder OggFLAC/stream_decoder.h: stream decoder interface
  54.  *  \ingroup oggflac_decoder
  55.  *
  56.  *  \brief
  57.  *  This module contains the functions which implement the stream
  58.  *  decoder.
  59.  *
  60.  * The interface here is identical to FLAC's stream decoder,
  61.  * including the callbacks.  See the \link flac_stream_decoder
  62.  * FLAC stream decoder module \endlink for full documentation.
  63.  *
  64.  * \{
  65.  */
  66.  
  67.  
  68. /** State values for an OggFLAC__StreamDecoder
  69.  *
  70.  *  The decoder's state can be obtained by calling OggFLAC__stream_decoder_get_state().
  71.  */
  72. typedef enum {
  73.  
  74.     OggFLAC__STREAM_DECODER_OK = 0,
  75.     /**< The decoder is in the normal OK state. */
  76.  
  77.     OggFLAC__STREAM_DECODER_OGG_ERROR,
  78.     /**< An error occurred in the underlying Ogg layer.  */
  79.  
  80.     OggFLAC__STREAM_DECODER_READ_ERROR,
  81.     /**< The read callback returned an error. */
  82.  
  83.     OggFLAC__STREAM_DECODER_FLAC_STREAM_DECODER_ERROR,
  84.     /**< An error occurred in the underlying FLAC stream decoder;
  85.      * check OggFLAC__stream_decoder_get_FLAC_stream_decoder_state().
  86.      */
  87.  
  88.     OggFLAC__STREAM_DECODER_INVALID_CALLBACK,
  89.     /**< The decoder was initialized before setting all the required callbacks. */
  90.  
  91.     OggFLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR,
  92.     /**< Memory allocation failed. */
  93.  
  94.     OggFLAC__STREAM_DECODER_ALREADY_INITIALIZED,
  95.     /**< OggFLAC__stream_decoder_init() was called when the decoder was
  96.      * already initialized, usually because
  97.      * OggFLAC__stream_decoder_finish() was not called.
  98.      */
  99.  
  100.     OggFLAC__STREAM_DECODER_UNINITIALIZED
  101.     /**< The decoder is in the uninitialized state. */
  102.  
  103. } OggFLAC__StreamDecoderState;
  104.  
  105. /** Maps an OggFLAC__StreamDecoderState to a C string.
  106.  *
  107.  *  Using an OggFLAC__StreamDecoderState as the index to this array
  108.  *  will give the string equivalent.  The contents should not be modified.
  109.  */
  110. extern OggFLAC_API const char * const OggFLAC__StreamDecoderStateString[];
  111.  
  112.  
  113. /***********************************************************************
  114.  *
  115.  * class OggFLAC__StreamDecoder
  116.  *
  117.  ***********************************************************************/
  118.  
  119. struct OggFLAC__StreamDecoderProtected;
  120. struct OggFLAC__StreamDecoderPrivate;
  121. /** The opaque structure definition for the stream decoder type.
  122.  *  See the \link oggflac_stream_decoder stream decoder module \endlink
  123.  *  for a detailed description.
  124.  */
  125. typedef struct {
  126.     struct OggFLAC__StreamDecoderProtected *protected_; /* avoid the C++ keyword 'protected' */
  127.     struct OggFLAC__StreamDecoderPrivate *private_; /* avoid the C++ keyword 'private' */
  128. } OggFLAC__StreamDecoder;
  129.  
  130. /** Signature for the read callback.
  131.  *  See OggFLAC__stream_decoder_set_read_callback()
  132.  *  and FLAC__StreamDecoderReadCallback for more info.
  133.  *
  134.  * \param  decoder  The decoder instance calling the callback.
  135.  * \param  buffer   A pointer to a location for the callee to store
  136.  *                  data to be decoded.
  137.  * \param  bytes    A pointer to the size of the buffer.
  138.  * \param  client_data  The callee's client data set through
  139.  *                      OggFLAC__stream_decoder_set_client_data().
  140.  * \retval FLAC__StreamDecoderReadStatus
  141.  *    The callee's return status.
  142.  */
  143. typedef FLAC__StreamDecoderReadStatus (*OggFLAC__StreamDecoderReadCallback)(const OggFLAC__StreamDecoder *decoder, FLAC__byte buffer[], unsigned *bytes, void *client_data);
  144.  
  145. /** Signature for the write callback.
  146.  *  See OggFLAC__stream_decoder_set_write_callback()
  147.  *  and FLAC__StreamDecoderWriteCallback for more info.
  148.  *
  149.  * \param  decoder  The decoder instance calling the callback.
  150.  * \param  frame    The description of the decoded frame.
  151.  * \param  buffer   An array of pointers to decoded channels of data.
  152.  * \param  client_data  The callee's client data set through
  153.  *                      OggFLAC__stream_decoder_set_client_data().
  154.  * \retval FLAC__StreamDecoderWriteStatus
  155.  *    The callee's return status.
  156.  */
  157. typedef FLAC__StreamDecoderWriteStatus (*OggFLAC__StreamDecoderWriteCallback)(const OggFLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data);
  158.  
  159. /** Signature for the metadata callback.
  160.  *  See OggFLAC__stream_decoder_set_metadata_callback()
  161.  *  and FLAC__StreamDecoderMetadataCallback for more info.
  162.  *
  163.  * \param  decoder  The decoder instance calling the callback.
  164.  * \param  metadata The decoded metadata block.
  165.  * \param  client_data  The callee's client data set through
  166.  *                      OggFLAC__stream_decoder_set_client_data().
  167.  */
  168. typedef void (*OggFLAC__StreamDecoderMetadataCallback)(const OggFLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data);
  169.  
  170. /** Signature for the error callback.
  171.  *  See OggFLAC__stream_decoder_set_error_callback()
  172.  *  and FLAC__StreamDecoderErrorCallback for more info.
  173.  *
  174.  * \param  decoder  The decoder instance calling the callback.
  175.  * \param  status   The error encountered by the decoder.
  176.  * \param  client_data  The callee's client data set through
  177.  *                      OggFLAC__stream_decoder_set_client_data().
  178.  */
  179. typedef void (*OggFLAC__StreamDecoderErrorCallback)(const OggFLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data);
  180.  
  181.  
  182. /***********************************************************************
  183.  *
  184.  * Class constructor/destructor
  185.  *
  186.  ***********************************************************************/
  187.  
  188. /** Create a new stream decoder instance.  The instance is created with
  189.  *  default settings; see the individual OggFLAC__stream_decoder_set_*()
  190.  *  functions for each setting's default.
  191.  *
  192.  * \retval OggFLAC__StreamDecoder*
  193.  *    \c NULL if there was an error allocating memory, else the new instance.
  194.  */
  195. OggFLAC_API OggFLAC__StreamDecoder *OggFLAC__stream_decoder_new();
  196.  
  197. /** Free a decoder instance.  Deletes the object pointed to by \a decoder.
  198.  *
  199.  * \param decoder  A pointer to an existing decoder.
  200.  * \assert
  201.  *    \code decoder != NULL \endcode
  202.  */
  203. OggFLAC_API void OggFLAC__stream_decoder_delete(OggFLAC__StreamDecoder *decoder);
  204.  
  205.  
  206. /***********************************************************************
  207.  *
  208.  * Public class method prototypes
  209.  *
  210.  ***********************************************************************/
  211.  
  212. /** Set the read callback.
  213.  * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_read_callback()
  214.  *
  215.  * \note
  216.  * The callback is mandatory and must be set before initialization.
  217.  *
  218.  * \default \c NULL
  219.  * \param  decoder  A decoder instance to set.
  220.  * \param  value    See above.
  221.  * \assert
  222.  *    \code decoder != NULL \endcode
  223.  *    \code value != NULL \endcode
  224.  * \retval FLAC__bool
  225.  *    \c false if the decoder is already initialized, else \c true.
  226.  */
  227. OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_read_callback(OggFLAC__StreamDecoder *decoder, OggFLAC__StreamDecoderReadCallback value);
  228.  
  229. /** Set the write callback.
  230.  * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_write_callback()
  231.  *
  232.  * \note
  233.  * The callback is mandatory and must be set before initialization.
  234.  *
  235.  * \default \c NULL
  236.  * \param  decoder  A decoder instance to set.
  237.  * \param  value    See above.
  238.  * \assert
  239.  *    \code decoder != NULL \endcode
  240.  *    \code value != NULL \endcode
  241.  * \retval FLAC__bool
  242.  *    \c false if the decoder is already initialized, else \c true.
  243.  */
  244. OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_write_callback(OggFLAC__StreamDecoder *decoder, OggFLAC__StreamDecoderWriteCallback value);
  245.  
  246. /** Set the metadata callback.
  247.  * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_metadata_callback()
  248.  *
  249.  * \note
  250.  * The callback is mandatory and must be set before initialization.
  251.  *
  252.  * \default \c NULL
  253.  * \param  decoder  A decoder instance to set.
  254.  * \param  value    See above.
  255.  * \assert
  256.  *    \code decoder != NULL \endcode
  257.  *    \code value != NULL \endcode
  258.  * \retval FLAC__bool
  259.  *    \c false if the decoder is already initialized, else \c true.
  260.  */
  261. OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_metadata_callback(OggFLAC__StreamDecoder *decoder, OggFLAC__StreamDecoderMetadataCallback value);
  262.  
  263. /** Set the error callback.
  264.  * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_error_callback()
  265.  *
  266.  * \note
  267.  * The callback is mandatory and must be set before initialization.
  268.  *
  269.  * \default \c NULL
  270.  * \param  decoder  A decoder instance to set.
  271.  * \param  value    See above.
  272.  * \assert
  273.  *    \code decoder != NULL \endcode
  274.  *    \code value != NULL \endcode
  275.  * \retval FLAC__bool
  276.  *    \c false if the decoder is already initialized, else \c true.
  277.  */
  278. OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_error_callback(OggFLAC__StreamDecoder *decoder, OggFLAC__StreamDecoderErrorCallback value);
  279.  
  280. /** Set the client data to be passed back to callbacks.
  281.  *  This value will be supplied to callbacks in their \a client_data
  282.  *  argument.
  283.  *
  284.  * \default \c NULL
  285.  * \param  decoder  A decoder instance to set.
  286.  * \param  value    See above.
  287.  * \assert
  288.  *    \code decoder != NULL \endcode
  289.  * \retval FLAC__bool
  290.  *    \c false if the decoder is already initialized, else \c true.
  291.  */
  292. OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_client_data(OggFLAC__StreamDecoder *decoder, void *value);
  293.  
  294. /** Set the serial number for the Ogg stream.
  295.  * The default behavior is to use the serial number of the first Ogg
  296.  * page.  Setting a serial number here will explicitly define which
  297.  * stream is to be decoded.
  298.  *
  299.  * \default \c use serial number of first page
  300.  * \param  decoder        A decoder instance to set.
  301.  * \param  serial_number  See above.
  302.  * \assert
  303.  *    \code decoder != NULL \endcode
  304.  * \retval FLAC__bool
  305.  *    \c false if the decoder is already initialized, else \c true.
  306.  */
  307. OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_serial_number(OggFLAC__StreamDecoder *decoder, long serial_number);
  308.  
  309. /** Direct the decoder to pass on all metadata blocks of type \a type.
  310.  * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_metadata_respond()
  311.  *
  312.  * \default By default, only the \c STREAMINFO block is returned via the
  313.  *          metadata callback.
  314.  * \param  decoder  A decoder instance to set.
  315.  * \param  type     See above.
  316.  * \assert
  317.  *    \code decoder != NULL \endcode
  318.  *    \a type is valid
  319.  * \retval FLAC__bool
  320.  *    \c false if the decoder is already initialized, else \c true.
  321.  */
  322. OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_metadata_respond(OggFLAC__StreamDecoder *decoder, FLAC__MetadataType type);
  323.  
  324. /** Direct the decoder to pass on all APPLICATION metadata blocks of the
  325.  *  given \a id.
  326.  * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_metadata_respond_application()
  327.  *
  328.  * \default By default, only the \c STREAMINFO block is returned via the
  329.  *          metadata callback.
  330.  * \param  decoder  A decoder instance to set.
  331.  * \param  id       See above.
  332.  * \assert
  333.  *    \code decoder != NULL \endcode
  334.  *    \code id != NULL \endcode
  335.  * \retval FLAC__bool
  336.  *    \c false if the decoder is already initialized, else \c true.
  337.  */
  338. OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_metadata_respond_application(OggFLAC__StreamDecoder *decoder, const FLAC__byte id[4]);
  339.  
  340. /** Direct the decoder to pass on all metadata blocks of any type.
  341.  * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_metadata_respond_all()
  342.  *
  343.  * \default By default, only the \c STREAMINFO block is returned via the
  344.  *          metadata callback.
  345.  * \param  decoder  A decoder instance to set.
  346.  * \assert
  347.  *    \code decoder != NULL \endcode
  348.  * \retval FLAC__bool
  349.  *    \c false if the decoder is already initialized, else \c true.
  350.  */
  351. OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_metadata_respond_all(OggFLAC__StreamDecoder *decoder);
  352.  
  353. /** Direct the decoder to filter out all metadata blocks of type \a type.
  354.  * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_metadata_ignore()
  355.  *
  356.  * \default By default, only the \c STREAMINFO block is returned via the
  357.  *          metadata callback.
  358.  * \param  decoder  A decoder instance to set.
  359.  * \param  type     See above.
  360.  * \assert
  361.  *    \code decoder != NULL \endcode
  362.  *    \a type is valid
  363.  * \retval FLAC__bool
  364.  *    \c false if the decoder is already initialized, else \c true.
  365.  */
  366. OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_metadata_ignore(OggFLAC__StreamDecoder *decoder, FLAC__MetadataType type);
  367.  
  368. /** Direct the decoder to filter out all APPLICATION metadata blocks of
  369.  *  the given \a id.
  370.  * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_metadata_ignore_application()
  371.  *
  372.  * \default By default, only the \c STREAMINFO block is returned via the
  373.  *          metadata callback.
  374.  * \param  decoder  A decoder instance to set.
  375.  * \param  id       See above.
  376.  * \assert
  377.  *    \code decoder != NULL \endcode
  378.  *    \code id != NULL \endcode
  379.  * \retval FLAC__bool
  380.  *    \c false if the decoder is already initialized, else \c true.
  381.  */
  382. OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_metadata_ignore_application(OggFLAC__StreamDecoder *decoder, const FLAC__byte id[4]);
  383.  
  384. /** Direct the decoder to filter out all metadata blocks of any type.
  385.  * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_metadata_ignore_all()
  386.  *
  387.  * \default By default, only the \c STREAMINFO block is returned via the
  388.  *          metadata callback.
  389.  * \param  decoder  A decoder instance to set.
  390.  * \assert
  391.  *    \code decoder != NULL \endcode
  392.  * \retval FLAC__bool
  393.  *    \c false if the decoder is already initialized, else \c true.
  394.  */
  395. OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_metadata_ignore_all(OggFLAC__StreamDecoder *decoder);
  396.  
  397. /** Get the current decoder state.
  398.  *
  399.  * \param  decoder  A decoder instance to query.
  400.  * \assert
  401.  *    \code decoder != NULL \endcode
  402.  * \retval OggFLAC__StreamDecoderState
  403.  *    The current decoder state.
  404.  */
  405. OggFLAC_API OggFLAC__StreamDecoderState OggFLAC__stream_decoder_get_state(const OggFLAC__StreamDecoder *decoder);
  406.  
  407. /** Get the state of the underlying FLAC stream decoder.
  408.  *  Useful when the stream decoder state is
  409.  *  \c OggFLAC__STREAM_DECODER_FLAC_STREAM_DECODER_ERROR.
  410.  *
  411.  * \param  decoder  A decoder instance to query.
  412.  * \assert
  413.  *    \code decoder != NULL \endcode
  414.  * \retval FLAC__StreamDecoderState
  415.  *    The FLAC stream decoder state.
  416.  */
  417. OggFLAC_API FLAC__StreamDecoderState OggFLAC__stream_decoder_get_FLAC_stream_decoder_state(const OggFLAC__StreamDecoder *decoder);
  418.  
  419. /** This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_get_channels()
  420.  *
  421.  * \param  decoder  A decoder instance to query.
  422.  * \assert
  423.  *    \code decoder != NULL \endcode
  424.  * \retval unsigned
  425.  *    See above.
  426.  */
  427. OggFLAC_API unsigned OggFLAC__stream_decoder_get_channels(const OggFLAC__StreamDecoder *decoder);
  428.  
  429. /** This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_get_channel_assignment()
  430.  *
  431.  * \param  decoder  A decoder instance to query.
  432.  * \assert
  433.  *    \code decoder != NULL \endcode
  434.  * \retval OggFLAC__ChannelAssignment
  435.  *    See above.
  436.  */
  437. OggFLAC_API FLAC__ChannelAssignment OggFLAC__stream_decoder_get_channel_assignment(const OggFLAC__StreamDecoder *decoder);
  438.  
  439. /** This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_get_bits_per_sample()
  440.  *
  441.  * \param  decoder  A decoder instance to query.
  442.  * \assert
  443.  *    \code decoder != NULL \endcode
  444.  * \retval unsigned
  445.  *    See above.
  446.  */
  447. OggFLAC_API unsigned OggFLAC__stream_decoder_get_bits_per_sample(const OggFLAC__StreamDecoder *decoder);
  448.  
  449. /** This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_get_sample_rate()
  450.  *
  451.  * \param  decoder  A decoder instance to query.
  452.  * \assert
  453.  *    \code decoder != NULL \endcode
  454.  * \retval unsigned
  455.  *    See above.
  456.  */
  457. OggFLAC_API unsigned OggFLAC__stream_decoder_get_sample_rate(const OggFLAC__StreamDecoder *decoder);
  458.  
  459. /** This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_get_blocksize()
  460.  *
  461.  * \param  decoder  A decoder instance to query.
  462.  * \assert
  463.  *    \code decoder != NULL \endcode
  464.  * \retval unsigned
  465.  *    See above.
  466.  */
  467. OggFLAC_API unsigned OggFLAC__stream_decoder_get_blocksize(const OggFLAC__StreamDecoder *decoder);
  468.  
  469. /** Initialize the decoder instance.
  470.  *  Should be called after OggFLAC__stream_decoder_new() and
  471.  *  OggFLAC__stream_decoder_set_*() but before any of the
  472.  *  OggFLAC__stream_decoder_process_*() functions.  Will set and return the
  473.  *  decoder state, which will be OggFLAC__STREAM_DECODER_OK
  474.  *  if initialization succeeded.
  475.  *
  476.  * \param  decoder  An uninitialized decoder instance.
  477.  * \assert
  478.  *    \code decoder != NULL \endcode
  479.  * \retval OggFLAC__StreamDecoderState
  480.  *    \c OggFLAC__STREAM_DECODER_OK if initialization was
  481.  *    successful; see OggFLAC__StreamDecoderState for the meanings of other
  482.  *    return values.
  483.  */
  484. OggFLAC_API OggFLAC__StreamDecoderState OggFLAC__stream_decoder_init(OggFLAC__StreamDecoder *decoder);
  485.  
  486. /** Finish the decoding process.
  487.  *  Flushes the decoding buffer, releases resources, resets the decoder
  488.  *  settings to their defaults, and returns the decoder state to
  489.  *  OggFLAC__STREAM_DECODER_UNINITIALIZED.
  490.  *
  491.  *  In the event of a prematurely-terminated decode, it is not strictly
  492.  *  necessary to call this immediately before OggFLAC__stream_decoder_delete()
  493.  *  but it is good practice to match every OggFLAC__stream_decoder_init()
  494.  *  with an OggFLAC__stream_decoder_finish().
  495.  *
  496.  * \param  decoder  An uninitialized decoder instance.
  497.  * \assert
  498.  *    \code decoder != NULL \endcode
  499.  */
  500. OggFLAC_API void OggFLAC__stream_decoder_finish(OggFLAC__StreamDecoder *decoder);
  501.  
  502. /** This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_flush()
  503.  *
  504.  * \param  decoder  A decoder instance.
  505.  * \assert
  506.  *    \code decoder != NULL \endcode
  507.  * \retval FLAC__bool
  508.  *    \c true if successful, else \c false if a memory allocation
  509.  *    error occurs.
  510.  */
  511. OggFLAC_API FLAC__bool OggFLAC__stream_decoder_flush(OggFLAC__StreamDecoder *decoder);
  512.  
  513. /** This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_reset()
  514.  *
  515.  * \param  decoder  A decoder instance.
  516.  * \assert
  517.  *    \code decoder != NULL \endcode
  518.  * \retval FLAC__bool
  519.  *    \c true if successful, else \c false if a memory allocation
  520.  *    error occurs.
  521.  */
  522. OggFLAC_API FLAC__bool OggFLAC__stream_decoder_reset(OggFLAC__StreamDecoder *decoder);
  523.  
  524. /** Decode one metadata block or audio frame.
  525.  *  This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_process_single()
  526.  *
  527.  * \param  decoder  An initialized decoder instance in the state
  528.  *                  \c OggFLAC__STREAM_DECODER_OK.
  529.  * \assert
  530.  *    \code decoder != NULL \endcode
  531.  *    \code OggFLAC__stream_decoder_get_state(decoder) == OggFLAC__STREAM_DECODER_OK \endcode
  532.  * \retval FLAC__bool
  533.  *    \c false if any read or write error occurred (except
  534.  *    \c FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC), else \c true;
  535.  *    in any case, check the decoder state with
  536.  *    OggFLAC__stream_decoder_get_state() to see what went wrong or to
  537.  *    check for lost synchronization (a sign of stream corruption).
  538.  */
  539. OggFLAC_API FLAC__bool OggFLAC__stream_decoder_process_single(OggFLAC__StreamDecoder *decoder);
  540.  
  541. /** Decode until the end of the metadata.
  542.  *  This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_process_until_end_of_metadata()
  543.  *
  544.  * \param  decoder  An initialized decoder instance in the state
  545.  *                  \c OggFLAC__STREAM_DECODER_OK.
  546.  * \assert
  547.  *    \code decoder != NULL \endcode
  548.  *    \code OggFLAC__stream_decoder_get_state(decoder) == OggFLAC__STREAM_DECODER_OK \endcode
  549.  * \retval FLAC__bool
  550.  *    \c false if any read or write error occurred (except
  551.  *    \c OggFLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC), else \c true;
  552.  *    in any case, check the decoder state with
  553.  *    OggFLAC__stream_decoder_get_state() to see what went wrong or to
  554.  *    check for lost synchronization (a sign of stream corruption).
  555.  */
  556. OggFLAC_API FLAC__bool OggFLAC__stream_decoder_process_until_end_of_metadata(OggFLAC__StreamDecoder *decoder);
  557.  
  558. /** Decode until the end of the stream.
  559.  *  This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_process_until_end_of_stream()
  560.  *
  561.  * \param  decoder  An initialized decoder instance in the state
  562.  *                  \c OggFLAC__STREAM_DECODER_OK.
  563.  * \assert
  564.  *    \code decoder != NULL \endcode
  565.  *    \code OggFLAC__stream_decoder_get_state(decoder) == OggFLAC__STREAM_DECODER_OK \endcode
  566.  * \retval FLAC__bool
  567.  *    \c false if any read or write error occurred (except
  568.  *    \c OggFLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC), else \c true;
  569.  *    in any case, check the decoder state with
  570.  *    OggFLAC__stream_decoder_get_state() to see what went wrong or to
  571.  *    check for lost synchronization (a sign of stream corruption).
  572.  */
  573. OggFLAC_API FLAC__bool OggFLAC__stream_decoder_process_until_end_of_stream(OggFLAC__StreamDecoder *decoder);
  574.  
  575. /* \} */
  576.  
  577. #ifdef __cplusplus
  578. }
  579. #endif
  580.  
  581. #endif
  582.